// 重建路由守卫
import router from '@/router/index.js'
import store from '@/store' // 引入vuex store实例
import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式

const whiteList = ['/login', '/404']
// const holdBack = ['/import']
// 前置守卫
router.beforeEach(async(to, from, next) => {
	NProgress.start()
	/* 判断token*/
	if (store.getters.token) {
		// await store.dispatch('user/getInfo')
		/* 判断是否前往登录页 */
		if (to.path === '/login') {
			next('/')
		} else {
			if (!store.getters.userInfo.id) {
				const { roles } = await store.dispatch('user/getInfo')
				const routes = await store.dispatch('Permission/filterRoutes', roles.menus)
				router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
				next(to.path)
			} else {
				/* 有token不去登录页，直接放行*/
				next()
			}
		}
	} else {
		/* 没有token */
		if (whiteList.indexOf(to.path) > -1) {
			/* 前往白名单页面 */
			next()
		} else {
			/* 前往非白名单页面 */
			next('/login')
		}
	}
	NProgress.done() // 手动强制关闭一次  为了解决 手动切换地址时  进度条的不关闭的问题
})

// 后置守卫
router.afterEach(function() {
	NProgress.done() // 关闭进度条
})
